Esercitazione di organizzioni e società digitali

Di Simona Badi, Alice Bossi e Laura Parati

Corso di laurea di Scienze del lavoro e dell'amministrazione (LAM)

Il dataframe

Il dataset si riferisce ai matrimoni celebrati a Milano per anno dell'evento, dal 2003 in poi.

In particolare questo dataframe è disponibile sul sito del comune di Milano, i dati raccolti al suo interno sono stati collezionati a partire dal primo gennaio del 2003 fino al 31 dicembre 2019 e sono stati aggiornati annualmente.

Cliccare qui andare al sito degli Open data del comune di Milano.

Le variabili

I matrimoni sono classificati secondo variabili relative all'evento (luogo del matrimonio, tipo di rito), e variabili relative ai due sposi (residenza, stato civile precedente il matrimonio, cittadinanza, età).

La variabile 'numerosità' si riferisce a quante coppie si sono sposate con le stesse caratteristiche, quindi è il numero di matrimoni che hanno le stesse identiche caratteristiche.

In [1]:
#importo le librerie
import numpy as np
import pandas as pd
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn; seaborn.set()

#importo il file csv
data =pd.read_csv(r"C:\Users\Laura\Desktop\PythonDataScienceHandbook-master\notebooks\data\matrimoni_unioni_civili.csv")

#cancello la colonna '_id' in quanto jupyter notebook al momento dell'importazione del file csv ne crea una identica
data.drop('_id', inplace=True, axis=1)

#visualizzo il dataframe
data
Out[1]:
Anno_evento Luogo_matrimonio Rito Residenza_marito Residenza_moglie Stato_civile_marito Stato_civile_moglie Cittadinanza_marito Cittadinanza_moglie Eta_marito Eta_moglie Numerosità
0 2003 Milano Cattolico Milano Italia Celibe Nubile Italia Italia 31.0 23.0 1
1 2003 Milano Cattolico Milano Italia Celibe Nubile Italia Italia 31.0 24.0 1
2 2003 Milano Cattolico Milano Italia Celibe Nubile Italia Italia 31.0 29.0 5
3 2003 Milano Cattolico Milano Italia Celibe Nubile Italia Italia 31.0 30.0 1
4 2003 Milano Cattolico Milano Italia Celibe Nubile Italia Italia 31.0 31.0 6
... ... ... ... ... ... ... ... ... ... ... ... ...
43532 2019 Milano Geova Milano Italia Divorziato o già coniugato Vedova Moldova Romania 38.0 37.0 1
43533 2019 Milano Geova Milano Milano Celibe Nubile Italia Italia 25.0 28.0 1
43534 2019 Milano Geova Milano Milano Celibe Nubile Italia Italia 28.0 31.0 1
43535 2019 Milano Geova Milano Milano Celibe Nubile Italia Italia 30.0 30.0 1
43536 2019 Milano Geova Milano Milano Celibe Nubile Romania Romania 20.0 28.0 1

43537 rows × 12 columns

L'analisi dei dati

Creiamo due mask di valori booleani rispetto alle condizioni se il rito è cattolico o civile, dopo di chè andremo a confrontare con delle misure statistiche quali sono la media,il massimo e il minimo del'età con cui le persone si sono sposate, dopodichè andremo ad analizzare in particolare l'età media sia in generale che suddivisa per rito e anno

In [2]:
mask_cattolico= data['Rito'] == 'Cattolico'
In [3]:
mask_civile= data['Rito'] == 'Civile'

Andiamo a calcolare il numero di persone e lo inseriamo nella variabile 'persone', in quanto la variabile numero_matrimoni è espressa per numero di coppie ( quindi numero_matrimoni = 1 significa una coppia che si sposa e quindi due persone ).

Dopodichè inseriemo la variabile nel dataframe per semplificare i calcoli successivi

In [4]:
#rinomino la colonna Numerosità in numero_matrimoni per evitare di fare confusione
data =data.rename(columns={'Numerosità':'numero_matrimoni' })

persone=data['numero_matrimoni']*2
data['Numero_Persone']= persone
data.head()
Out[4]:
Anno_evento Luogo_matrimonio Rito Residenza_marito Residenza_moglie Stato_civile_marito Stato_civile_moglie Cittadinanza_marito Cittadinanza_moglie Eta_marito Eta_moglie numero_matrimoni Numero_Persone
0 2003 Milano Cattolico Milano Italia Celibe Nubile Italia Italia 31.0 23.0 1 2
1 2003 Milano Cattolico Milano Italia Celibe Nubile Italia Italia 31.0 24.0 1 2
2 2003 Milano Cattolico Milano Italia Celibe Nubile Italia Italia 31.0 29.0 5 10
3 2003 Milano Cattolico Milano Italia Celibe Nubile Italia Italia 31.0 30.0 1 2
4 2003 Milano Cattolico Milano Italia Celibe Nubile Italia Italia 31.0 31.0 6 12

Raggruppiamo il dataframe per anno e per rito andando a sommare il numero di persone raggruppate in quella specifica categoria.

In [5]:
data_grouped=data.groupby(['Anno_evento','Rito']).sum()
data_grouped.drop(['Eta_moglie', 'numero_matrimoni','Eta_marito'],inplace=True, axis=1)
data_grouped
Out[5]:
Numero_Persone
Anno_evento Rito
2003 Cattolico 4196
Civile 4324
Geova 8
2004 Altri Riti 4
Cattolico 3676
... ... ...
2019 Altri Riti 20
Cattolico 1270
Civile 4594
Evangelico 6
Geova 28

92 rows × 1 columns

Calcoliamo il massimo,il minimo e la media dell'età degli uomini e delle donne che si sono sposate negli anni presi in considerazione ovvero dal 2003 fino al 2019

In [6]:
#operazione per avere come media un risultato intero, senza decimali
media_etamoglie= int(round(data['Eta_moglie'].mean()))
media_etamarito= int(round(data['Eta_marito'].mean()))

print("\nL'età più alta in cui una donna che si è sposata fra il 2003 e il 2019 è pari a",np.max(data['Eta_moglie']),"anni" " \nmentre l'età più alta per gli uomini è pari ad anni",np.max(data['Eta_marito'],axis=0) )
print("\nL'età più bassa in cui una donna che si è sposata fra il 2003 e il 2019 è pari a",np.min(data['Eta_moglie']), " \nmentre l'età più bassa per gli uomini è pari a",np.min(data['Eta_marito'], axis=0) )
print("\nL'età media delle donne che si sono sposate fra il 2003 e il 2019 è pari ad anni",media_etamoglie," \nmentre l'età media degli uomini che si sono sposati fra il 2003 e il 2019 è pari ad anni",media_etamarito )
L'età più alta in cui una donna che si è sposata fra il 2003 e il 2019 è pari a 91.0 anni 
mentre l'età più alta per gli uomini è pari ad anni 99.0

L'età più bassa in cui una donna che si è sposata fra il 2003 e il 2019 è pari a 16.0  
mentre l'età più bassa per gli uomini è pari a 18.0

L'età media delle donne che si sono sposate fra il 2003 e il 2019 è pari ad anni 37  
mentre l'età media degli uomini che si sono sposati fra il 2003 e il 2019 è pari ad anni 40

L'analisi dei valori mancanti

Analizziamo i valori n.a, ovvero i valori mancanti. Prima di tutti andiamo a vedere se sono presenti all'interno del dataframe generale

In [7]:
#analizziamo le righe
data.isnull().any() #ci sono valori nulli in Cittadinanza_marito,in Eta_marito e in Eta_moglie
Out[7]:
Anno_evento            False
Luogo_matrimonio       False
Rito                   False
Residenza_marito       False
Residenza_moglie       False
Stato_civile_marito    False
Stato_civile_moglie    False
Cittadinanza_marito     True
Cittadinanza_moglie    False
Eta_marito              True
Eta_moglie              True
numero_matrimoni       False
Numero_Persone         False
dtype: bool
In [8]:
#nella colonna cittadinanza marito l'unica riga con un valore mancante è la 42517esima 
data[data['Cittadinanza_marito'].isnull()]
Out[8]:
Anno_evento Luogo_matrimonio Rito Residenza_marito Residenza_moglie Stato_civile_marito Stato_civile_moglie Cittadinanza_marito Cittadinanza_moglie Eta_marito Eta_moglie numero_matrimoni Numero_Persone
42517 2019 Milano Civile Milano Milano Celibe Nubile NaN Italia 29.0 28.0 1 2
In [9]:
data[data['Eta_marito'].isnull()] #nella colonna eta_marito ci sono 12 righe con valori mancanti
Out[9]:
Anno_evento Luogo_matrimonio Rito Residenza_marito Residenza_moglie Stato_civile_marito Stato_civile_moglie Cittadinanza_marito Cittadinanza_moglie Eta_marito Eta_moglie numero_matrimoni Numero_Persone
565 2003 Milano Civile Estero Milano Celibe Nubile Gambia Italia NaN 35.0 1 2
2273 2003 Milano Civile Milano Milano Vedovo Vedova Italia Italia NaN 69.0 1 2
2757 2004 Milano Cattolico Milano Milano Celibe Nubile Italia Italia NaN 28.0 1 2
5931 2005 Milano Civile Estero Milano Celibe Nubile Ecuador Ecuador NaN 25.0 1 2
8850 2006 Milano Civile Estero Milano Celibe Nubile Perù Perù NaN 24.0 1 2
9855 2006 Milano Civile Milano Milano Celibe Nubile Italia Italia NaN 34.0 1 2
9856 2006 Milano Civile Milano Milano Celibe Nubile Italia Italia NaN 45.0 1 2
9857 2006 Milano Civile Milano Milano Celibe Nubile Italia Italia NaN 53.0 1 2
12698 2007 Milano Civile Milano Milano Celibe Nubile Italia Italia NaN 35.0 1 2
15429 2008 Milano Civile Milano Milano Celibe Divorziata o già coniugata Senegal Italia NaN 37.0 1 2
18540 2009 Milano Civile Milano Milano Celibe Nubile Italia Italia NaN 32.0 1 2
18915 2009 Milano Civile Milano Milano Celibe Nubile Italia Perù NaN 25.0 1 2
In [10]:
#nella colonna eta_moglie ci sono 14 righe con valori mancanti
data[data['Eta_moglie'].isnull()]
Out[10]:
Anno_evento Luogo_matrimonio Rito Residenza_marito Residenza_moglie Stato_civile_marito Stato_civile_moglie Cittadinanza_marito Cittadinanza_moglie Eta_marito Eta_moglie numero_matrimoni Numero_Persone
230 2003 Milano Cattolico Milano Milano Celibe Nubile Italia Italia 33.0 NaN 1 2
3837 2004 Milano Civile Milano Estero Celibe Nubile Italia Ucraina 24.0 NaN 1 2
5007 2004 Milano Civile Milano Milano Vedovo Divorziata o già coniugata Italia Italia 50.0 NaN 1 2
6552 2005 Milano Civile Milano Estero Celibe Nubile Italia Giappone 30.0 NaN 1 2
7209 2005 Milano Civile Milano Milano Celibe Nubile Italia Italia 30.0 NaN 1 2
8926 2006 Milano Civile Italia Italia Celibe Divorziata o già coniugata Italia Italia 36.0 NaN 1 2
11612 2007 Milano Civile Estero Milano Celibe Nubile Marocco Italia 26.0 NaN 1 2
11638 2007 Milano Civile Estero Milano Celibe Nubile Nigeria Nigeria 32.0 NaN 1 2
11817 2007 Milano Civile Italia Milano Celibe Nubile Italia Italia 29.0 NaN 1 2
12420 2007 Milano Civile Milano Italia Divorziato o già coniugato Nubile Italia Italia 63.0 NaN 1 2
14142 2008 Milano Cattolico Milano Milano Celibe Nubile Italia Italia 56.0 NaN 1 2
16072 2008 Milano Civile Milano Milano Divorziato o già coniugato Divorziata o già coniugata Italia Italia 54.0 NaN 1 2
16338 2008 Milano Civile Milano Milano Vedovo Nubile Italia Italia 44.0 NaN 1 2
18261 2009 Milano Civile Milano Italia Celibe Nubile Cinese, Rep. Popolare Cinese, Rep. Popolare 27.0 NaN 1 2

Analisi sull'età delle persone che si sono sposate

Troviamo l'età media suddivisa per ogni rito senza distinzione di anno partendo da:

  1. la media dell'età degli uomini e delle donne che si sono sposate diversificata per riti senza distinzione di anno
  2. la media dell'età degli uomini e delle donne che si sono sposate diversificata per riti nei diversi anni
In [11]:
#media delle età delle persone che si sono sposate con i vari riti
eta_media=data.groupby('Rito').mean()
#trasformo in int per avere numeri interi
eta_media['Eta_marito']= eta_media['Eta_marito'].astype(int)
eta_media['Eta_moglie']= eta_media['Eta_moglie'].astype(int)
#calcolo la differenza di età fra marito e moglie
eta_media['Differenza_eta']= eta_media['Eta_marito']-eta_media['Eta_moglie']
eta_media.drop(['Anno_evento', 'numero_matrimoni','Numero_Persone'],inplace=True, axis=1)
eta_media
Out[11]:
Eta_marito Eta_moglie Differenza_eta
Rito
Altri Riti 35 32 3
Cattolico 35 32 3
Civile 42 38 4
Evangelico 36 33 3
Geova 31 29 2
Israelita 36 34 2

Da questa tabella deduciamo che mediamente le persone che si sposano prima sono coloro che professano la fede dei Testimonia di Geova. Osserviamo poi che mediamente la differenza di età maggiore è quella fra persone sposate con rito civile

Andiamo a guardare la medià di età fra i diversi anni perchè ci interessa vedere se c'è stato un effettivo cambiamento negli anni di questo dato

In [12]:
#media dell'età delle persone che si sono sposate nei diversi anni
eta_media_anni=data.groupby(['Anno_evento','Rito']).mean()
#trasformo in int per avere numeri interi
eta_media_anni['Eta_marito']= eta_media_anni['Eta_marito'].astype(int)
eta_media_anni['Eta_moglie']= eta_media_anni['Eta_moglie'].astype(int)
#calcolo la differenza di età fra marito e moglie
eta_media_anni['Differenza_eta']= abs(eta_media_anni['Eta_marito']-eta_media_anni['Eta_moglie'])

eta_media_anni.drop(['numero_matrimoni','Numero_Persone'],inplace=True, axis=1)
eta_media_anni
Out[12]:
Eta_marito Eta_moglie Differenza_eta
Anno_evento Rito
2003 Cattolico 34 31 3
Civile 39 35 4
Geova 33 30 3
2004 Altri Riti 37 36 1
Cattolico 34 31 3
... ... ... ... ...
2019 Altri Riti 35 34 1
Cattolico 36 33 3
Civile 44 40 4
Evangelico 41 34 7
Geova 28 28 0

92 rows × 3 columns

In [13]:
eta_media_anni = eta_media_anni.reset_index()
eta_melt= eta_media_anni.melt(id_vars=["Anno_evento","Rito","Differenza_eta"],
                              var_name='sesso',
                              value_name='Eta')
eta_melt.drop('Differenza_eta',inplace=True,axis=1)
eta_melt

g= seaborn.relplot(data= eta_melt, x='Anno_evento',y='Eta',hue='sesso',col='Rito',col_wrap=3)

Notiamo che mediamente l'età in cui una donna si sposa è più bassa rispetto all'uomo.

In particolare possiamo vedere come nel rito cattolico e in quello civile l'età delle persone per ogni anno è abbastanza stabile (anche se nel civile negli ultimi anni si è alzata).

In [14]:
np.max(eta_media_anni['Differenza_eta'])
eta_media_anni.query('Differenza_eta == 10')
Out[14]:
Anno_evento Rito Eta_marito Eta_moglie Differenza_eta
50 2012 Israelita 36 26 10

La differenza di età maggiore è stata registrata nel 2012, fra due persone sposate con rito Israelita, ed è pari a 10 anni

Analisi della variazione del numero di persone sposate

Per poter riuscire a capire meglio l'andamento dei matrimoni nel corso degli anni abbiamo deciso di utilizzare dei grafici

Iniziamo a guardare l'andamento del numero delle persone che si sono sposate in generale negli anni

In [15]:
#raggruppo per anno e conto le persone sposate per ogni anno
data_grouped2=data.groupby(['Anno_evento']).sum()
data_grouped2.drop(['Eta_moglie', 'numero_matrimoni','Eta_marito'],inplace=True, axis=1)
data_grouped2
Out[15]:
Numero_Persone
Anno_evento
2003 8528
2004 8200
2005 8096
2006 7690
2007 7918
2008 7760
2009 6722
2010 5780
2011 5818
2012 6322
2013 6000
2014 5858
2015 5880
2016 5814
2017 5600
2018 5932
2019 5918
In [16]:
#creo il grafico 
seaborn.lineplot(data=data_grouped2, x='Anno_evento', y='Numero_Persone');

Si può notare che con il passare degli anni matrimoni di qualunque tipo sono calati.

In particolare possiamo notare che a partire dal 2008 la 'curva' della quantità di persone che si sposano diminuisce

In [17]:
variazione_2008_2009= round(100-((5780/6722)*100),2)
variazione_2009_2010= round(((5818/5780)*100)-100,2)
print ("Notiamo come fra il 2008 e il 2009 il numero di persone sposate siano diminuite del "
    ,variazione_2008_2009, "% \nmentre fra il 2009  il 2010 il numero di persone sale del", variazione_2009_2010,"%")
Notiamo come fra il 2008 e il 2009 il numero di persone sposate siano diminuite del  14.01 % 
mentre fra il 2009  il 2010 il numero di persone sale del 0.66 %

A nostro parere la ragione per cui il numero di persone sposate diminuisca del 14% nel 2008 è stata la crisi economica. Infatti a causa della crisi econimica del 2008 ci furono delle difficoltà a trovare un’occupazione stabile, ad avere uno stipendio sufficiente e diventare autonomi dalle famiglie; questo portò i giovani a rimanere legati economicamente ai genitori e a sposarsi più avanti con l'età.

Prendiamo in considerazione i riti prevalenti e analizziamo grazie ai grafici l'andamento del numero delle persone sposate

In [18]:
#dataframe per le persone sposate con rito cattolico e con rito civile
cattolici = data.loc[(data['Rito'] == 'Cattolico')].groupby(['Anno_evento']).sum()
cattolici.drop(['Eta_moglie', 'numero_matrimoni','Eta_marito'],inplace=True, axis=1)

civili= data.loc[(data['Rito'] == 'Civile')].groupby(['Anno_evento']).sum()
civili.drop(['Eta_moglie', 'numero_matrimoni','Eta_marito'],inplace=True, axis=1)

- Cattolici

In [19]:
#creo il grafico per i cattolici
seaborn.lineplot(data=cattolici, x='Anno_evento', y='Numero_Persone');

Anche prendendo in considerazione solo i matrimoni cattolici possiamo notare come con il passare degli anni siano diminuiti

In [20]:
variazione_2003_2019= round(((4196/1270)*100)-100,2)
print("Dal 2003 al 2019 c'è stata una diminuzione del numero di persone che si sposate del",variazione_2003_2019, "%")
Dal 2003 al 2019 c'è stata una diminuzione del numero di persone che si sposate del 230.39 %

- Civili

In [21]:
#creo il grafico per i civili
seaborn.lineplot(data=civili, x='Anno_evento', y='Numero_Persone',color='red');

Analizzando il numero di persone sposate con rito civile possiamo notare che nel 2008 c'è stata una diminuzione del numero di persone sposate civilmente ma lentamente a partire dal 2010 hanno iniziato ad aumentare. Guardiamo in particolare la diminuizione avvenuta fra il 2008 e il 2010:

Unendo i due grafici possiamo fare un'analisi più completa

In [22]:
#definisco il dataframe
df = data.loc[((data['Rito'] == 'Cattolico') | (data['Rito']=='Civile'))].groupby(['Anno_evento', 'Rito']).sum()
df.drop(['Eta_moglie', 'numero_matrimoni','Eta_marito'],inplace=True, axis=1)
In [23]:
#creo il grafico
seaborn.lineplot(data=df ,x='Anno_evento', y='Numero_Persone',hue="Rito");

Analizzando i matrimoni civili e cattolici simultaneamente notiamo che i matrimoni civili dall'inizio della raccolta dei dati ( ovvero dal 2003 ) sono in numero maggiore rispetto ai matrimoni effettuati con rito cattolico e non solo hanno avuto una diminuzione a partire dal 2008 minore rispetto ai matrimoni cattolici ma dal 2010, nonostante le persone che si sposano con rito cattolico continuano a diminuire , i matrimoni civili iniziano ad aumentare.

- Evangelico

In [24]:
evangelico = data.loc[(data['Rito'] == 'Evangelico')].groupby(['Anno_evento']).sum()
evangelico.drop(['Eta_moglie', 'numero_matrimoni','Eta_marito'],inplace=True, axis=1)
evangelico
Out[24]:
Numero_Persone
Anno_evento
2004 6
2005 10
2006 4
2007 4
2009 2
2010 12
2011 12
2012 16
2013 6
2014 2
2015 12
2016 6
2017 6
2018 6
2019 6
In [25]:
seaborn.lineplot(data=evangelico, x='Anno_evento', y='Numero_Persone', color='black');

Nel comune di Milano fra il 2003 e il 2019 il numero di persone, rispetto agli altri riti, che si sono sposate con il rito evangelico è basso, infatti i numeri spazione fra un minimo di 6 ad un massimo di 16 persone l'anno

Negli ultimi quattro anni osserviamo che il numero di persone che si sono sposate si è stabilizzato, ovvero dal 2016 fino al 2019 abbiamo un numero di persone sempre uguale di persone che si sono sposate co rito evangelico (in particolare sono sei persone ogni anno)

- Geova

In [26]:
geova = data.loc[(data['Rito'] == 'Geova')].groupby(['Anno_evento']).sum()
geova.drop(['Eta_moglie', 'numero_matrimoni','Eta_marito'],inplace=True, axis=1)
seaborn.lineplot(data=geova, x='Anno_evento', y='Numero_Persone',color='green');

Anche per questo rito abbiamo una quantità di persone minore rispetto ai due riti principali (quello cattolico e quello civile)

Notiamo come il numero di persone sposate con il rito della fede dei Testimoni di Geova sono aumentati negli anni, in particolare dal 2009 sempre più persone si sono sposate con questo rito

- Israelita

In [27]:
israelita = data.loc[(data['Rito'] == 'Israelita')].groupby(['Anno_evento']).sum()
israelita.drop(['Eta_moglie', 'numero_matrimoni','Eta_marito'],inplace=True, axis=1)
seaborn.lineplot(data=israelita, x='Anno_evento', y='Numero_Persone',color='purple');

La quantità di persone che si sono sposate a Milano con il rito Isrealita è molto bassa, è il rito con la quantità minore di persone sposate, che variano fra le due persone l'anno e le sei persone l'anno.

- Altri Riti

In [28]:
altri = data.loc[(data['Rito'] == 'Altri Riti')].groupby(['Anno_evento']).sum()
altri.drop(['Eta_moglie', 'numero_matrimoni','Eta_marito'],inplace=True, axis=1)
seaborn.lineplot(data=altri, x='Anno_evento', y='Numero_Persone',color='orange');

Per tutti gli altri riti diversi da quelli presi in considerazione finora possiamo notare come il numero di persone sposate siano piccoli fino al 2008 (fra due persone l'anno e le otto persone l'anno); dal 2008 la quantità di persone inizia ad aumentare, anche se di poco, per poi stabilizzarsi per due anni (nel 2009 e nel 2010), dopodichè abbiamo che nel 2011 sono diminiuti di 4 unità per poi crescere ancora.

Prendiamo in considerazione ora le nazionalità delle persone sposate

In [29]:
citt_marito= data.groupby(['Cittadinanza_marito']).sum()
citt_marito.drop(['Anno_evento', 'Eta_marito','Eta_moglie','numero_matrimoni'],inplace=True, axis=1)

citt_moglie= data.groupby(['Cittadinanza_moglie']).sum()
citt_moglie.drop(['Anno_evento', 'Eta_marito','Eta_moglie','numero_matrimoni'],inplace=True, axis=1)

Vogliamo sapere quante persone con cittadinanza non italiana si sono sposate a Milano

In [30]:
a = citt_marito.query("Cittadinanza_marito != 'Italia'")
b = citt_moglie.query("Cittadinanza_moglie != 'Italia'")
p1= a['Numero_Persone'].sum()
p2 = b['Numero_Persone'].sum()

print("Le persone con cittadinanza non Italiana sposate a Milano fra il 2003 e il 2019 sono pari a:", p1+p2)
Le persone con cittadinanza non Italiana sposate a Milano fra il 2003 e il 2019 sono pari a: 46664

Ora analizziamo quante persone si sono sposate con la stessa cittadinanza

In [31]:
citt_it=data.query("Cittadinanza_marito== 'Italia' & Cittadinanza_moglie== 'Italia' ").shape[0]*2
print("In particolare le persone che si sono sposate entrambe con cittadinza italiana sono:",citt_it)
In particolare le persone che si sono sposate entrambe con cittadinza italiana sono: 51856
In [32]:
persone_stessa_cit= data.query('Cittadinanza_marito== Cittadinanza_moglie').shape[0]*2
print("La quantità di persone che si sono sposate con persone con la stessa cittadinanza sono:",persone_stessa_cit)
La quantità di persone che si sono sposate con persone con la stessa cittadinanza sono: 59578
In [33]:
citt_straniera=data.query("Cittadinanza_marito!= 'Italia' & Cittadinanza_moglie!= 'Italia' & Cittadinanza_marito==Cittadinanza_moglie ")
print("Le persone sposate con stessa cittadinanza, diversa da italiana, sono:",citt_straniera.shape[0]*2)


cs= citt_straniera.groupby(['Cittadinanza_marito','Cittadinanza_moglie']).sum()
cs.drop(['Anno_evento','Eta_marito','Eta_moglie','numero_matrimoni'],inplace=True,axis=1)
cs
Le persone sposate con stessa cittadinanza, diversa da italiana, sono: 7722
Out[33]:
Numero_Persone
Cittadinanza_marito Cittadinanza_moglie
Albania Albania 172
Algeria Algeria 8
Angola Angola 2
Argentina Argentina 34
Australia Australia 10
... ... ...
Uruguay Uruguay 4
Venezuela Venezuela 6
Zambia Zambia 2
ex Jugoslavia ex Jugoslavia 12
n.d. n.d. 18

89 rows × 1 columns

In particolare vediamo nella tabella riportata sopra il numero di persone sposate con stessa cittadinanza suddivise per le varie nazionalità

Analizziamo ora le persone sposate fra di loro con nazionalità differenti

In [34]:
citt_diverse= data.query('Cittadinanza_marito!= Cittadinanza_moglie')
print("Il numero di persone sposate con nazionalità differenti sono",citt_diverse.shape[0]*2)
Il numero di persone sposate con nazionalità differenti sono 27496
In [35]:
citt_diverse_it= data.query("Cittadinanza_marito!= Cittadinanza_moglie & (Cittadinanza_marito== 'Italia' | Cittadinanza_moglie == 'Italia')")
print("Le persone con nazionalità italiana che hanno sposato uno straniero sono:",citt_diverse_it.shape[0]*2)
Le persone con nazionalità italiana che hanno sposato uno straniero sono: 24450

Choropleth maps

In [36]:
import pandas as pd
import numpy as np
import folium
import os
import json
import requests

from folium.features import GeoJson, GeoJsonTooltip, GeoJsonPopup, LatLngPopup
In [37]:
sposi = data
sposi =sposi.rename(columns={'Numerosità':'numero_matrimoni' })
In [38]:
#Lo trasformo per avere due colonne: Coniuge, con valori "marito" e "moglie", e Cittadinanza con la nazionalità corrispondente
sposi_key=sposi.melt(
id_vars=[
 'Anno_evento',
 'Luogo_matrimonio',
 'Rito',
 'Residenza_marito',
 'Residenza_moglie',
 'Stato_civile_marito',
 'Stato_civile_moglie',
 'Eta_marito',
 'Eta_moglie',
 'numero_matrimoni'],
var_name="Coniuge",
value_name="Cittadinanza")
In [39]:
sposi_key.Coniuge=sposi_key.Coniuge.str.replace("Cittadinanza_","")
In [40]:
num=sposi_key.groupby("Cittadinanza")[['numero_matrimoni']].aggregate(sum)
num
Out[40]:
numero_matrimoni
Cittadinanza
2 37308
4 7012
6 3669
8 2508
10 1500
... ...
Vietnam 8
Yemen 2
Zambia 4
ex Jugoslavia 68
n.d. 59

174 rows × 1 columns

In [41]:
num2=sposi_key.groupby("Cittadinanza")[['Eta_marito','Eta_moglie']].aggregate('mean')
num2
Out[41]:
Eta_marito Eta_moglie
Cittadinanza
2 41.153904 37.142811
4 37.020251 34.455505
6 34.335241 32.464432
8 33.342903 31.645933
10 32.416667 30.916667
... ... ...
Vietnam 42.125000 32.375000
Yemen 29.000000 25.500000
Zambia 29.750000 28.500000
ex Jugoslavia 37.352941 33.720588
n.d. 37.525424 33.847458

174 rows × 2 columns

In [42]:
num=num.join(num2)
num
Out[42]:
numero_matrimoni Eta_marito Eta_moglie
Cittadinanza
2 37308 41.153904 37.142811
4 7012 37.020251 34.455505
6 3669 34.335241 32.464432
8 2508 33.342903 31.645933
10 1500 32.416667 30.916667
... ... ... ...
Vietnam 8 42.125000 32.375000
Yemen 2 29.000000 25.500000
Zambia 4 29.750000 28.500000
ex Jugoslavia 68 37.352941 33.720588
n.d. 59 37.525424 33.847458

174 rows × 3 columns

In [43]:
num=num.reset_index()
num
Out[43]:
Cittadinanza numero_matrimoni Eta_marito Eta_moglie
0 2 37308 41.153904 37.142811
1 4 7012 37.020251 34.455505
2 6 3669 34.335241 32.464432
3 8 2508 33.342903 31.645933
4 10 1500 32.416667 30.916667
... ... ... ... ...
169 Vietnam 8 42.125000 32.375000
170 Yemen 2 29.000000 25.500000
171 Zambia 4 29.750000 28.500000
172 ex Jugoslavia 68 37.352941 33.720588
173 n.d. 59 37.525424 33.847458

174 rows × 4 columns

In [44]:
#world_countries è il file geojson con le colonne prese dal csv e i nomi delle nazioni allineati.
with open(r'C:\Users\Laura\Desktop\Choropleth-Matrimoni\countries_lp.geojson') as mm: 
    world_countries = json.load(mm)
In [45]:
sposi = pd.read_csv(r"C:\Users\Laura\Desktop\Choropleth-Matrimoni\sposi.csv", sep=",")
sposi
Out[45]:
name_long geometry Cittadinanza Numerosità Eta_marito Eta_moglie
0 Afghanistan MULTIPOLYGON (((71.04980228700009 38.408664450... Afghanistan 5 34.200000 32.400000
1 Albania MULTIPOLYGON (((19.7477657470001 42.5789008590... Albania 917 34.295681 29.305648
2 Algeria MULTIPOLYGON (((8.602510428642233 36.939510763... Algeria 60 36.016667 34.183333
3 Angola MULTIPOLYGON (((11.73751945100008 -16.69257798... Angola 6 31.000000 28.000000
4 Arabia Saudita MULTIPOLYGON (((41.8984667120001 16.7514836940... Arabia Saudita 1 47.000000 39.000000
... ... ... ... ... ... ...
143 Uzbekistan MULTIPOLYGON (((71.75730432100025 39.903095194... Uzbekistan 11 37.545455 32.727273
144 Venezuela MULTIPOLYGON (((-61.39027141599991 8.580580853... Venezuela 133 34.082707 31.616541
145 Vietnam MULTIPOLYGON (((106.6687117850002 8.7534854190... Vietnam 8 42.125000 32.375000
146 Yemen MULTIPOLYGON (((53.3082394570001 12.1183945370... Yemen 2 29.000000 25.500000
147 Zambia MULTIPOLYGON (((31.1198364670002 -8.6166305539... Zambia 4 29.750000 28.500000

148 rows × 6 columns

In [46]:
geoprova = folium.Map(location=[41.9027835, 12.4963655], tiles= "OpenStreetMap", zoom_start=2)

popup = GeoJsonPopup(
    fields=["name_long", "NumerositÃ\xa0", "Eta_marito", "Eta_moglie"],
    aliases=["Nome", "Numero di coniugi:", "Media età marito:", "Media età moglie:"],
    localize=True,
    labels=True,
)

tooltip = GeoJsonTooltip(
    fields=["name_long", "NumerositÃ\xa0", "Eta_marito", "Eta_moglie"],
    aliases=["Nome", "Numero di coniugi:", "Media età marito:", "Media età moglie:"],
    localize=True,
    sticky=False,
    labels=True,
    style="""
        background-color: #F0EFEF;
        border: 2px solid black;
        border-radius: 3px;
        box-shadow: 3px;
    """,
    max_width=800,
)

g=folium.Choropleth(
    geo_data=world_countries,
    name='choropleth',
    data=sposi,
    columns=['name_long', 'Numerosità'],
    key_on='feature.properties.name_long',
    fill_color='Spectral',
    fill_opacity=0.7,
    line_opacity=0.2,
    legend_name='Permessi di soggiorno'
    ).add_to(geoprova)

g.geojson.add_child(tooltip)
g.geojson.add_child(popup)
folium.TileLayer('stamentoner').add_to(geoprova)
Out[46]:
<folium.raster_layers.TileLayer at 0x1bb3fb301f0>
In [47]:
geoprova
Out[47]:
Make this Notebook Trusted to load map: File -> Trust Notebook

Analisi su un possibile join

Un dataset che si potrebbe utilizzare per poter fare un join potrebbe essere un dataframe sulle statistiche delle confessioni religiose per nazione, in modo da vedere se c’è una relazione rito-nazionalità e confessione religiosa predominante nello stato.

SINTESI DELL'ANALISI

Grazie al database iniziale possiamo quindi dire che dal 2003 al 2019 il numero di persone che si sposa è per lo più diminuito, questo vale non solo riferito ai numeri delle persone sposate con rito cattolico ma anche per il rito civile. Per quanto riguarda tutti gli altri riti i dati sono molto variegati.

Un'altra informazione utile è che mediamente fra i due partner sposati con qualunque rito la donna ha un'età inferiore al momento del matrimonio rispetto all'uomo. Inoltre la media dell'età in cui le donne e gli uomini si sposano è rimasta abbastanza stabile negli anni per quanto riguarda il rito cattolico mentre il rito civile l'età media si alzata negli anni ( anche se non di molto). La differenza di età varia mediamente fra 1 e 4 anni di differenza (ci sono ovviamente anche alcune eccezzioni come per esempio il caso riportato sopra del 2012 dove la differenza di età fra i partner era di 10 anni)

Andando ad analizzare i dati sulle varie nazionalità dei partener abbiamo trovato che fra le 113836 persone sposate dal 2003 al 2019 circa il 45.5% sono persone italiane sposate fra di loro, circa il 24.2% sono straniere persone sposate fra di loro con nazionlità diverse di cui circa il 6.8% sono persone straniere con uguale cittadinanza mentre le persone con nazionalità italiana che hanno sposato uno straniero sono circa il 21.5%.